package com.briup;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.*;

public class TestDOM {
    public static void main(String[] args) {
        System.out.println("Hello Test!");
        TestDOM testDOM = new TestDOM();
        testDOM.domParse("src/main/java/com/briup/class.xml");
    }

    // DOM
    // 解析xml文件
    public void domParse(String filePath) {
        // 1.创建解析类工厂的对象
        DocumentBuilderFactory buiderFactory = DocumentBuilderFactory.newInstance();
        try {
            // 2.通过工厂创建解析器对象
            DocumentBuilder documentBuilder = buiderFactory.newDocumentBuilder();
            // 3.解析xml文件
            Document document = documentBuilder.parse(filePath);
            // 4.获取根元素
            Element root = document.getDocumentElement();
            // System.out.println("root=" + root);
            // 5.获取根节点下的子节点
            NodeList childNodes = root.getChildNodes();
            // 6.遍历子节点
            for(int i=0;i<childNodes.getLength();i++) {
                // 获取当前处理的子节点
                Node node = childNodes.item(i);
                // System.out.println(node);
                // System.out.println(node.getNodeType());
                // System.out.println(node.getNodeName());
                // 1元素 3文本
                // 判断节点的类型 是本文件节点还是元素节点
                 // 只获取元素节点
                 if (node.getNodeType() == 1){
                    // System.out.println(node.getNodeType());
                    // System.out.println(node.getNodeName());
                    // 获取当前元素节点中的所有属性
                    NamedNodeMap attributes = node.getAttributes();
                    // 循环变量拿到每一个属性
                    for(int j=0;j<attributes.getLength();j++){
                        // 强制转换为Attr类型的对象 表示属性
                        Attr attr = (Attr)attributes.item(j);
                        // 可以通过方法获取到属性名和属性值
                        String attrName = attr.getName();
                        String attrValue = attr.getValue();
                        System.out.println("attrName="+ attrName);
                        System.out.println("attrValue="+ attrValue);
                    }
                    // 获取当前节点的子节点
                    NodeList nodelist = node.getChildNodes();
                    for(int k=0;k < nodelist.getLength(); k++){
                        Node item = nodelist.item(k);
                        // 判断当前节点是否是元素
                        if (item.getNodeType() == Node.ELEMENT_NODE){
                            // 获取文本节点中的内容
                            String nodeName = item.getNodeName();
                            String nodeText = item.getTextContent();
                            System.out.println("nodeName="+nodeName);
                            System.out.println("nodeText="+nodeText);
                        }
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
